import axios from "axios";
import { Message, MessageBox } from "element-ui";
import store from "@/store/index";
import { getToken,localstorageGetToken} from "@/utils/auth";

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API1,
  timeout: 30000, // 请求超时时间
});

// debugger;
let isOpenMessage = false;
// request拦截器
service.interceptors.request.use(
  (config) => {
    if ((getToken()||localstorageGetToken()) && (store.getters.token == getToken()||store.getters.token==localstorageGetToken())) {
      config.headers["Authorization"] = getToken()||localstorageGetToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    return config;
  },
  (error) => {
    // Do something with request error
    console.log(error); // for debug
    Promise.reject(error);
  }
);

// respone拦截器
service.interceptors.response.use(
  (response) => {
    /**
     * code为非200是抛错 可结合自己业务进行修改
     */

    const res = response.data;
    if (res.code !== 200 && res.code !== 405) {
      // 401:未登录;

      if (res.code === 401) {
        if (!isOpenMessage) {
          isOpenMessage = true;
          MessageBox.confirm("你已被登出，请重新登录", "确定登出", {
            confirmButtonText: "重新登录",
            showCancelButton: false,
          })
            .then(() => {
              store.dispatch("LogOut").then(() => {
                location.reload(); // 为了重新实例化vue-router对象 避免bug
                this.$router.push({
                  name: "login",
                });
              });
            })
            .catch(() => {
              store.dispatch("LogOut").then(() => {
                location.reload(); // 为了重新实例化vue-router对象 避免bug
                this.$router.push({
                  name: "login",
                });
              });
            });
        }
      } else {
        Message({
          message: res.message,
          type: "error",
          duration: 3 * 1000,
        });
        // Message({
        //   message: "网络有点小问题，请稍后再试哦",
        //   type: "error",
        //   duration: 3 * 1000,
        // });
        return Promise.reject(response);
      }
    } else {
      isOpenMessage = false;
      return response.data;
    }
  },
  (error) => {
    console.log("err" + error); // for debug
    // Message({
    //   message: error.message,
    //   type: "error",
    //   duration: 3 * 1000,
    // });
    Message({
      message: "网络有点小问题，请稍后再试哦",
      type: "error",
      duration: 3 * 1000,
    });
    return Promise.reject(error);
  }
);

export default service;
